home *** CD-ROM | disk | FTP | other *** search
/ Amiga News 96 / Amiga News 96.iso / dpat / dpat129 / amighpv2a / docs / amighp2.0a_fr.doc < prev    next >
Text File  |  1977-12-31  |  11KB  |  484 lines

  1.  
  2.                            ********************
  3.                            *    AMIGHP V2.0   *
  4.                            * © LEGER Frederic *
  5.                            ********************
  6.                            *                  *
  7.                            *      MANUEL      *
  8.                            *                  *
  9.                            ********************
  10.  
  11. AVERTISSEMENT : DE NOMBREUX CHANGEMENTS ONT ETES FAIT !
  12.                 Prennez connaissances des nouvelles fonctions
  13.                 SL,SR,PUSHOBJ,NOT,AND,OR.
  14.                 D'autres ont par ailleurs changées de nom:
  15.  
  16.                 D1SAUV   -> D1RCL     MAKE     -> DO
  17.                 DO       -> LOOP      WEND     -> ENDWHILE
  18.                 LOOP     -> ENDLOOP   FINDEF   -> ENDDEF
  19.                 PUSH_STR -> STRCALC   PUSH_OBJ -> PUSHOBJ
  20.  
  21.                 De plus, j'ai implementé un optimiseur de code,
  22.                 il semble stable, MAIS il se peut que des bogues
  23.                 n'aient pas étés découverts dans la gestion
  24.                 des fichiers temporaires. A ce titre, je vous
  25.                 rappelle que si vous utilisez AMIGHPv2a, c'est
  26.                 a vos risques et perils.
  27.                 Le code non optimisé se trouve dans "a.out".
  28.                 Le code généré a été modifié en consequence,
  29.                 pour supporter l'optimiseur. Beaucoup de bogues
  30.                 ont ainsi été découverts.
  31.                 Je pense qu'il vaut mieux utiliser la version 2.0a
  32.                 car pas mal de choses ont changées.
  33.                 (La pluspart des programmes pour la version 1.0f
  34.                 ne seront pas compilé par la 2.0a !)
  35.  
  36. 1) La compilation
  37. -----------------
  38.  
  39. Lancez un shell et tapez :
  40.  
  41.    AMIGHP   nom_fichier_source   nom_fichier_destination
  42.  
  43. C'est aussi simple que ca !
  44.  
  45. 2) La pile compilateur
  46. ----------------------
  47.  
  48. Le compilateur dispose d'une pile de 2 niveaux se trouvant
  49. dans les champs A des registres A et C.
  50. Cette pile est le lieu de stockage temporaire des resultats,
  51. pour sauvegarder ces resultats il faut effectuer un stockage.
  52. ex:
  53.    12 I ADD -> C.A              , C.A plein
  54.    15 I ADD -> A.A              , A.A plein
  55.    ADD      -> C.A = C.A + A.A  , A.A vide
  56.    I STO    -> I = C.A          , C.A vide
  57.  
  58. Comme vous pouvez le voir, cela permet une optimisation du code,
  59. puisque l'adition peut etre effectuee entre les deux registres
  60. directement.
  61.  
  62. De meme, on peut ecrire : 0 I STO I 15 ADD 12 MUL I STO
  63. I vaudra alors 180.
  64.  
  65. ATTENTION : La pile ne contient que 2 niveaux, pas 3 ni plus !
  66.             Le compilateur se chargera de le faire remarquer.
  67.  
  68. 3) Les variables
  69. ----------------
  70.  
  71. Les variables ont une adresse fixe en memoire, ce qui est un
  72. gage de rapidite d'acces.
  73. Par defaut c'est $800F5 ce qui permet d'avoir 106 variables integer.
  74. C'est la zone de transfert de la HP48.
  75. De plus ce procede ne prend aucune RAM utilisateur.
  76. Vous pouvez choisir une autre zone memoire en faisant un poke dans
  77. AMIGHP en recherchant $0800F5 et en le remplacant par ce que bon
  78. vous semble !!!
  79.  
  80. 4) Les instructions supportees
  81. ------------------------------
  82.  
  83. DEF ...... ENDDEF
  84. -----------------
  85. Delimiteurs DU bloc de definition des variables.
  86. En effet, les variables ne sont declarees qu'au debut du programme.
  87. Ces deux instructions sont OBLIGATOIRES !!!
  88.  
  89. INTEGER
  90. -------
  91. Seul type de variable disponible a l'heure actuelle.
  92. Une variable INTEGER apartient a l'interval [0,1048575].
  93. Ce type correspond aux 5 quartets du champ A.
  94. ex:
  95.    DEF
  96.     I J K INTEGER
  97.    FINDEF
  98.  
  99. CHAR et POINTER
  100. ---------------
  101. Type de variable, créé pour une meilleure lisibilité,
  102. ils sont traité comme des INTEGERS
  103.  
  104. INC
  105. ---
  106. Incremente une variable
  107. ex:
  108.    I INC
  109.  
  110. DEC
  111. ---
  112. Decremente une variable
  113. ex:
  114.    I DEC
  115.  
  116. STO
  117. ---
  118. Stocke une valeur , un resultat ou le contenu d'une
  119. variable dans une variable.
  120. ex:
  121.    120 I STO ou J I STO   (stocke dans I)
  122.  
  123. EXIT
  124. ----
  125. Sort du programme.
  126. ex:
  127.    .... I PUSH EXIT
  128.  
  129. PUSH
  130. ----
  131. Pousse une variable dans la pile HP48.
  132. ex:
  133.    I PUSH
  134.  
  135. ADD
  136. ---
  137. Additionne deux operandes , resultat dans C.A ou A.A
  138. ex:
  139.    I  J ADD K STO
  140.    I 10 ADD K STO
  141.  
  142. SUB
  143. ---
  144. Soustrait deux operandes , resultat dans C.A ou A.A
  145. ex:
  146.    I  J SUB K STO
  147.    I 10 SUB K STO
  148.  
  149. MUL
  150. ---
  151. Multiplie deux operandes , resultat dans C.A ou A.A
  152. ex:
  153.    I  J MUL K STO
  154.    I 10 MUL K STO
  155.  
  156. INTOFF
  157. ------
  158. Enleve les interruptions.
  159.  
  160. INTON
  161. -----
  162. Remet les interruptions.
  163.  
  164. POP
  165. ---
  166. Lit un system binary dans la pile et le place dans une variable.
  167. Cette fonction le DROP de la pile.
  168. ex:                          --------------
  169.    I POP                    |4)            |
  170. => I vaut 154A4h            |3)            |
  171.                             |2)            |
  172.                             |1) <154A4h>   |
  173.                             |--------------|
  174.                             |  |  |  |  |  |
  175.                              --------------
  176.  
  177. LOOP
  178. ----
  179. Ouverture d'une boucle infinie LOOP...ENDLOOP
  180.  
  181. ENDLOOP
  182. -------
  183. Fermeture d'une boucle infinie LOOP...ENDLOOP
  184.  
  185. WHILE
  186. -----
  187. Boucle WHILE condition DO instructions ENDWHILE
  188. ex:
  189.    WHILE
  190.      I J <
  191.    DO
  192.      I DEC
  193.    ENDWHILE
  194.  
  195.  
  196. ==,!=,<,>,<=,>=
  197. ---------------
  198. Compare deux operandes
  199.  
  200. I J <=   se lit I <= J
  201. I 10 <=  se lit I <= 10
  202.  
  203. IF
  204. --
  205. Boucle IF
  206. ex:
  207.    IF          IF
  208.     I 50 >      I 50 >
  209.    THEN        THEN
  210.     I DEC       I DEC
  211.    ELSE        ENDIF
  212.      I INC
  213.    ENDIF
  214.  
  215. Le ENDIF est OBLIGATOIRE , pas le IF.
  216.  
  217. INCLUDE
  218. -------
  219. Inclut du code assembleur "inline"
  220. ex:
  221.    ROUT1.ASM INCLUDE
  222.  
  223. GETI
  224. ----
  225. Recupere 5 quartets pointés par D1.(un INTEGER!)
  226. (Recupere l'adresse de l'objet au niveau 1 de la pile HP48
  227. et la stocke dans une variable par exemple.)
  228. ex:
  229.    ADR.OBJ GETI
  230.  
  231. PUTI
  232. ----
  233. Ecrit un INTEGER sur le flot pointé par D1.
  234.  
  235. D1STO
  236. -----
  237. Stocke la valeur d'une variable (pointeur) dans D1.
  238. On peut aussi stocker un nombre directement,
  239. c'est plus propre! (Lave avec MirLaine!)
  240. ex:
  241.  526032 I STO I D1STO  -> BEURK !!!
  242.  526032 D1STO          -> D1=(5) $806D0
  243.  
  244. D1RCL
  245. -----
  246. Sauvegarde D1 dans une variable.
  247. ex:
  248.    15400 I STO I D1STO J PUTC I D1RCL
  249.  
  250. GETC
  251. ----
  252. Recupere un caractere pointe par D1 dans une variable
  253. et fait D1=D1+2.
  254. ex:
  255.    15400 I STO I D1STO J GETC
  256.  
  257. PUTC
  258. ----
  259. Ecrit un caractere sur l'octet pointe par D1 et fait D1=D1+2.
  260. ex:
  261.    15400 I STO I D1STO J PUTC
  262.  
  263. GETCAR
  264. ------
  265. Recupere un caractere pointe par D1 dans une variable.
  266. ex:
  267.    15400 I STO I D1STO J GETCAR
  268.  
  269. PUTCAR
  270. ------
  271. Ecrit un caractere sur l'octet pointe par D1.
  272. ex:
  273.    15400 I STO I D1STO J PUTCAR
  274.  
  275. DROP
  276. ----
  277. Drop un niveau de la pile HP48.
  278.  
  279. RESSTR
  280. ------
  281. Reserve une chaine en memoire et renvoie l'adresse du contenu.
  282. IMPORTANT: La pile compilateur est sauvegardee, et restauree apres.
  283. ex:
  284.    1500 TAILLE STO
  285.    ADR.DEB TAILLE RESSTR
  286.  
  287. RAPPEL: L'adresse du contenu est egale a l'adresse de debut
  288.         d'objet (ADR.DEB) + 10
  289.  
  290. STRCALC
  291. -------
  292. recalcule une chaine.
  293. IMPORTANT: La pile compilateur est sauvegardee, et restauree apres.
  294. ex:
  295.    ADR.FIN ADR.DEB STRCALC
  296.  
  297. PUSHOBJ
  298. --------
  299. Pousse un objet dans la pile HP48.
  300. ex:
  301.    ADR.DEB PUSHOBJ
  302.  
  303. DISPON
  304. ------
  305. Allume l'affichage.
  306.  
  307. DISPOFF
  308. -------
  309. Eteint l'affichage.
  310.  
  311. AON
  312. ---
  313. Tous les indicateurs ON.
  314.  
  315. AOFF
  316. ----
  317. Tous les indicateurs OFF.
  318.  
  319. DIV
  320. ---
  321. Divise
  322. ex:
  323.    I J DIV  <--> I/J
  324.    I 3 DIV  <--> I/3
  325.  
  326.    I J ADD
  327.    3   DIV  <--> (I+J)/3
  328.  
  329. BEEP
  330. ----
  331. Fait beeper le buzzer!
  332. IMPORTANT: La pile compilateur est sauvegardee, et restauree apres.
  333. ex:
  334.    DUREE FREQ BEEP
  335. DUREE est en millisecondes.
  336.  
  337. SL
  338. --
  339. Multiplie par 2.
  340. ex:
  341.    I SL
  342.  
  343. SR
  344. --
  345. Divise par 2
  346. ex:
  347.    J SR
  348.  
  349. INCD1
  350. -----
  351. Incremente D1.
  352. ex:
  353.    12 INCD1  -> D1=D1+  12
  354.  
  355. NOT
  356. ---
  357. non logique.
  358.  
  359. OR
  360. --
  361. ou logique. (0 est false à priori)
  362.  
  363. AND
  364. ---
  365. et logique. (0 est false à priori)
  366.  
  367. ERROR
  368. -----
  369. fait un message d'erreur et sort.
  370. ex:
  371.    5 ERROR  -> "Error: Memory Clear"
  372.  
  373. GOSUB
  374. -----
  375. Saute a une procedure.
  376. ex:
  377.    BOB GOSUB
  378.  
  379. RETURN
  380. ------
  381. Sort de la procedure.
  382. ex:
  383.    IF I 560 == THEN RETURN ENDIF
  384.  
  385. 5) Les PROCEDURES
  386. -----------------
  387. - Les procedures sont reduites au strict-minimum pour l'instant.
  388.   Leurs variables sont locales (pseudo-locales serait plus precis!)
  389.   On doit definir une procedure ainsi :
  390.  
  391. <<
  392.    DEF              Un tel programme ne fait rien, MAIS...
  393.    ENDDEF           il a le merite d'exister. ET C'EST TOUT !
  394.    LOOP
  395.     BOB GOSUB       -> GOSUBL  BOB
  396.     EXIT               D0=D0+  5
  397.    ENDLOOP                A=DAT0  A ...
  398.  
  399.  
  400.    BOB PROC         *
  401.    DEF              | Si cette partie est negligee, on peut
  402.    ENDDEF           | creer le label BOB tout seul dans le code asm.
  403.                     | ou bien ne pas le mettre -> Erreur
  404.    ENDPROC          *
  405. >>
  406.  
  407. 6) ANNEXES
  408. ----------
  409.  
  410. - Je me degage de toute responsabilite concernant les eventuelles catastrophes
  411.   que pourrait entrainer l'usage de mon compilateur.
  412.   Vous l'utilisez à vos risques et perils. Vous etes avertis !
  413.  
  414. - AMIGHP n'est pas parfait, loin de la! Certaines de ses fonctions
  415.   n'ont pas encore ete testees totalement. Alors si vous trouviez
  416.   des BUGs, soyez sympas dites le moi. Et dans la mesure du possible,
  417.   j'y remedierai.
  418.  
  419. - Le code doit etre retravaille un minimum pour etre compile
  420.   par les Assembleurs tel HPAsmv3.10e Par Christophe Vallee.
  421.  
  422.      Entete :         include entries.i
  423.                       con(5)  DOCODE
  424.                       Debut   con(5)  Fin-Debut
  425.  
  426.                       ......................
  427.                       ......................
  428.  
  429.      Fin    :         Fin
  430.  
  431. - Le logiciel est libre de droit.
  432.   Si vous souhaitez en avoir le source, laissez moi un message
  433.   au 3614 AMIGATEL BAL NANARD125.
  434.  
  435. - Futures ameliorations :
  436.   -----------------------
  437.   + De nouvelles adresses de base pour les variables.
  438.   + Un type LONG (64bits) pour les variables.
  439.   + Une nouvelle fonction PUSHOBJ.
  440.   + Plein d'autres fonctions.
  441.   + Une interface graphique avec Requesters.
  442.   + Des versions MAC et PC.
  443.  
  444. 7) Le ABOUT
  445. -----------
  446.  
  447. Nom:    LEGER
  448. Prenom: Frederic
  449. Age :   19
  450. Etudes: DEUG TI 2éme année
  451. Lieu :  Grenoble
  452.  
  453. Mon AMIGA :  un A500+,A530,4Mb 60ns,2Mb CHIP,
  454.              1 Giga AMI ,1 Giga PC et 58Mb MAC.
  455.  
  456. J'en profite pour saluer mes potes Vincent ROUKINE (ROOK)
  457. et Vincent VERILHAC (VV Fly is here?) qui m'ont file quelques
  458. conseils utiles.
  459. Je remercie aussi les membres du journal AmigaNEWS, sans qui mon
  460. compilo ne serait pas sur AMINET.
  461.  
  462.                    ___
  463.                    \\\\
  464.                     \\\\       ONLY AMIGA !!!
  465.                      \\\\      ___
  466.                       \\\\    ////
  467.                        \\\\  ////
  468.                         \\\\////
  469.                          \\\///   LEDJ
  470.                           \\//
  471.                            \/
  472.  
  473.     *** DISCLAIMER ***
  474.  
  475.      NO GUARANTEE IS GIVEN NOR IMPLIED THAT THIS PROGRAM IS FIT FOR ANY
  476.      USE. THIS PROGRAM AND THE INFORMATION WITHIN THIS TEXT IS PROVIDED ON
  477.      "AS IS" BASIS. THE ENTIRE RISK AS TO ITS QUALITY AND PERFORMANCE IS
  478.      WITH THE USER. SHOULD THE PROGRAM PROVE DEFECTIVE, THE USER (AND NOT
  479.      THE AUTHOR) ASSUMES THE ENTIRE COST OF ALL NECCESSARY DAMAGES. IN NO
  480.      EVENT WILL THE AUTHOR BE LIABLE FOR DIRECT, INDIRECT, INCIDENTAL OR
  481.      CONSEQUENTIAL DAMAGES RESULTING FROM ANY DEFECT IN THE PROGRAM. THE
  482.      AUTHOR RESERVES THE RIGHT TO MAKE CHANGES TO THE SOFTWARE OR
  483.      DOCUMENTATION WITHOUT NOTICE.
  484.